home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / glass / glass.lha / GLASS / libtmc / fprstr.c < prev    next >
C/C++ Source or Header  |  1990-11-06  |  2KB  |  67 lines

  1. /* 
  2.    Copyright (C) 1990 C van Reewijk, email: dutentb.uucp!reeuwijk
  3.  
  4. This file is part of GLASS.
  5.  
  6. GLASS is free software; you can redistribute it and/or modify
  7. it under the terms of the GNU General Public License as published by
  8. the Free Software Foundation; either version 1, or (at your option)
  9. any later version.
  10.  
  11. GLASS is distributed in the hope that it will be useful,
  12. but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14. GNU General Public License for more details.
  15.  
  16. You should have received a copy of the GNU General Public License
  17. along with GLASS; see the file COPYING.  If not, write to
  18. the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  19.  
  20. /* File: fprstr.c
  21.  * C. van Reeuwijk
  22.  */
  23. #include <stdio.h>
  24. #include <ctype.h>
  25.  
  26. #include "tmc.h"
  27.  
  28. #define BACKSLASH '\\'
  29.  
  30. /* definition of 'print' for a 'string' */
  31. void fprint_string( f, s )
  32.  register FILE *f;
  33.  register char *s;
  34. {
  35.     register int c;
  36.  
  37.     if( s == (char *)0 ){
  38.     fputs( "<nil>", f );
  39.     return;
  40.     }
  41.     putc( '"', f );
  42.     while( *s != '\0' ){
  43.     c = *s++;
  44.     while( c<0 ) c += 256;
  45.     if( c == BACKSLASH || c == '"' ){
  46.         putc( BACKSLASH, f );
  47.         putc( c, f );
  48.         continue;
  49.     }
  50.     if( c>=' ' && c<='~' ){
  51.         putc( c, f );
  52.         continue;
  53.     }
  54.     switch( c ){
  55.         case '\b': putc( BACKSLASH, f ); putc( 'b', f ); break;
  56.         case '\f': putc( BACKSLASH, f ); putc( 'f', f ); break;
  57.         case '\n': putc( BACKSLASH, f ); putc( 'n', f ); break;
  58.         case '\r': putc( BACKSLASH, f ); putc( 'r', f ); break;
  59.         case '\t': putc( BACKSLASH, f ); putc( 't', f ); break;
  60.         case '\v': putc( BACKSLASH, f ); putc( 'v', f ); break;
  61.         default:
  62.         fprintf( f, "\\%03o", (c & 0xff) );
  63.     }
  64.     }
  65.     putc( '"', f );
  66. }
  67.